#include<iostream>


using namespace std;

// 类模板
template<class T>
class Stack
{
public:
	Stack(size_t capacity = 3);

	void Push(const T& data);

	// 其他方法...

	~Stack()
	{
		if (_array)
		{
			free(_array);
			_array = NULL;
			_capacity = 0;
			_size = 0;
		}
	}

private:
	T* _array;
	int _capacity;
	int _size;
};


template<class T>
Stack<T>::Stack(size_t capacity)
{
	/*_array = (T*)malloc(sizeof(T) * capacity);
	if (NULL == _array)
	{
		perror("malloc申请空间失败!!!");
		return;
	}*/
	_array = new T[capacity];

	_capacity = capacity;
	_size = 0;
}

template<class T>
void Stack<T>::Push(const T& data)
{
	// CheckCapacity();
	_array[_size] = data;
	_size++;
}


//template<typename T>
//T* MyAlloc(size_t sz)
//}
//  return new T[sz];
//}
//
//int main()
//{
//  int* pi = MyAlloc<int>(10);
//  return 0;
//}
//

//template<typename T>
//T Add(const T& x, const T& y)
//{
//  return x + y;
//}
//
//int main()
//{
//  int i1 = 10;
//  int i2 = 20;
//  double d1 = 3.14;
//  double d2 = 1.23;
//  
//  //编译器自动推导
//  cout << Add(i1,i2) << endl;
//  cout << Add(d1,d2) << endl;
//  cout << Add(i1,(int)d2) << endl;
//  cout << Add((double)i1,d2) << endl;
//  
// //显示实例化
// 
//  cout << Add<double>(d1,d2) << endl;
//  cout << Add<int>(d1,d2) << endl;
//  
//  return 0;
//}
